Release 10.1A: OpenEdge Getting Started:
Core Business Services


Identifying database events

It is important to be able to determine whether an event is a database event in order to know what the format of the _event-detail field is and whether to expect any child records in the _aud-audit-data-value table.

One way is to check the event definition and rely on the event name ending in .create or .delete or .update. All the internal policies conform to this. This can be checked in code as follows:

DEFINE VARIABLE lDbEvent AS LOGICAL INITIAL FALSE NO-UNDO. 
IF _event-name <> "":U AND 
(ENTRY(NUM-ENTRIES(_event-name,".":U),_event-name,".":U) = "create":U OR 
       ENTRY(NUM-ENTRIES(_event-name,".":U),_event-name,".":U) = "delete":U OR  
       ENTRY(NUM-ENTRIES(_event-name,".":U),_event-name,".":U) = "update":U) 
THEN lDbEvent = TRUE. 

This approach will work only if any user-defined events that relate to database events follow the same naming convention for the event name.

Another way is to check the contents of the _event-detail field for a specific format, as shown:

DEFINE VARIABLE lDbEvent AS LOGICAL INITIAL FALSE NO-UNDO. 
IF _event-detail <> "":U AND  
NUM-ENTRIES(ENTRY(1,_event-detail,CHR(7)),CHR(6)) = 4 THEN lDbEvent = TRUE.

A similar approach could be used to identify other types of events with a specifically formatted _event-detail. The primary consideration is to ensure the event definition follows some sort of naming convention to make all this possible and to be able to fall back to the event definition itself to determine the format of audit-related fields.


Copyright © 2005 Progress Software Corporation
www.progress.com
Voice: (781) 280-4000
Fax: (781) 280-4095